package cin.ufpe.br.GDI.Dados;

import java.sql.*;
import java.util.Vector;

import cin.ufpe.br.GDI.Entidades.Endereco;
import cin.ufpe.br.GDI.Entidades.Fotografo;
import cin.ufpe.br.GDI.Entidades.Reporter;

public class RepositorioFotografo {
	
	Connection conn;
	
	public RepositorioFotografo(Connection conn) {
		this.conn = conn;
	}
	
	public void inserirFotografo(Fotografo f) throws SQLException {
		Statement statement = conn.createStatement();
		
		String queryInsertEndereco= "INSERT INTO tb_endereco VALUES(ENDERECO_SQ.NEXTVAL,'"
									+ f.getEndereco().getLogradouro()+"',"
									+"'"+ f.getEndereco().getCidade() +"',"
									+"'"+ f.getEndereco().getEstado() +"',"
									+"'"+ f.getEndereco().getCEP()+"')";
		
		System.out.println(queryInsertEndereco);
		System.out.println(statement.executeUpdate(queryInsertEndereco));

		String queryInsertReporter = "INSERT INTO tb_fotografo SELECT " 
			+f.getCPF()+ ", "
			+"'"+ f.getNome()+"',"
			+"'"+f.getSexo() +"',"
			+"'"+f.getFuncao()+"',"
			+"to_date('"+f.getDataNascimento()+"','dd/mm/yyyy'),"
			+"to_date('"+f.getDataAdmissao()+"','dd/mm/yyyy'),"
			+"'"+f.getEmail() +"',"
			+"v_telefone(";

		for(int i=0;i<f.getTelefones().size();i++){

			queryInsertReporter=queryInsertReporter+"'"
			+f.getTelefones().elementAt(i)+"'";

			if(i==f.getTelefones().size()-1){

			}else{
				queryInsertReporter=queryInsertReporter+",";
			}


		}
		
		 queryInsertReporter = queryInsertReporter+ "),"
		 +"REF(e)";
		 
		 String queryIdEndereco = "SELECT ENDERECO_SQ.CURRVAL AS idEndereco FROM DUAL";
		 ResultSet rs = statement.executeQuery(queryIdEndereco);
		 rs.next();
		 int idEndereco = rs.getInt("idEndereco");
		 
		 queryInsertReporter=queryInsertReporter
		 +" FROM tb_endereco e WHERE e.id="+idEndereco;
		 
		 System.out.println(queryInsertReporter);
		 
		System.out.println(statement.executeUpdate(queryInsertReporter));
		
		conn.commit();
		
		
	
			
	}
	
	public void removerFotografo(Fotografo f) throws SQLException {
		
		Statement st = conn.createStatement();
		String query = "DELETE FROM tb_fotografo WHERE cpf = "+f.getCPF()+"";
		st.executeUpdate(query);
		conn.commit();
		st.close();
	}
	
	public Fotografo buscarFotografo(long cpf) throws SQLException {
		Fotografo retorno = null;
		Statement st = conn.createStatement();
		String query = "SELECT F.*, to_char(F.data_nascimento) as dataNascimento, to_char(F.data_admissao) as dataAdmissao, F.endereco.cep as cep, F.endereco.cidade as cidade" +
		", F.endereco.logradouro as logradouro, F.endereco.estado as estado FROM tb_fotografo F WHERE F.cpf = "+cpf;
		
		ResultSet rs = st.executeQuery(query);
		
		while(rs.next()) {
			String nome, sexo, funcao, dataNascimento, dataAdmissao, email;
			Endereco endereco;
			long CPF;
			Vector<String> telefones = new Vector<String>();
			
			nome = rs.getString("nome");
			sexo = rs.getString("sexo");
			funcao = rs.getString("funcao");
			dataNascimento = rs.getString("dataNascimento");
			dataAdmissao = rs.getString("dataAdmissao");
			email = rs.getString("email");
			CPF = rs.getLong("cpf");
			
			ResultSet rs2 = rs.getArray("telefone").getResultSet();
			while(rs2.next()) {
				telefones.add(rs2.getString(2));
			}
			
			String CEP = rs.getString("endereco");
			String cidade = rs.getString("cidade");
			String logradouro = rs.getString("logradouro");
			String estado = rs.getString("estado");
			
			
			endereco = new Endereco(CEP, cidade, logradouro, estado);
			
			retorno = new Fotografo(nome, sexo, funcao, dataNascimento, dataAdmissao, email, telefones, endereco, CPF);
						
		}
		
		return retorno;
	}
	
	public Vector<Fotografo> buscarFotografo(String nomeFotografo) throws SQLException {
		Vector<Fotografo> retorno = new Vector<Fotografo>();
		Statement st = conn.createStatement();
		String query = "SELECT F.*, to_char(F.data_nascimento) as dataNascimento, to_char(F.data_admissao) as dataAdmissao, F.endereco.cep as cep, F.endereco.cidade as cidade" +
				", F.endereco.logradouro as logradouro, F.endereco.estado as estado FROM tb_fotografo F WHERE LOWER(F.nome) LIKE '%"+nomeFotografo.toLowerCase()+"%'";
		ResultSet rs = st.executeQuery(query);
		System.out.println(query);
		
		while(rs.next()) {
			String nome, sexo, funcao, dataNascimento, dataAdmissao, email;
			Endereco endereco;
			long CPF;
			Vector<String> telefones = new Vector<String>();
			
			nome = rs.getString("nome");
			sexo = rs.getString("sexo");
			funcao = rs.getString("funcao");
			dataNascimento = rs.getString("dataNascimento");
			dataAdmissao = rs.getString("dataAdmissao");
			email = rs.getString("email");
			CPF = rs.getLong("cpf");
			
			ResultSet rs2 = rs.getArray("telefone").getResultSet();
			while(rs2.next()) {
				telefones.add(rs2.getString(2));
			}
			
			String CEP = rs.getString("endereco");
			String cidade = rs.getString("cidade");
			String logradouro = rs.getString("logradouro");
			String estado = rs.getString("estado");
			
			
			endereco = new Endereco(CEP, cidade, logradouro, estado);
			
			Fotografo f = new Fotografo(nome, sexo, funcao, dataNascimento, dataAdmissao, email, telefones, endereco, CPF);
			
			retorno.add(f);
			
		}
		
		return retorno;
	}
	
	public static void main(String[] args) {
		ConexaoBD conexao = new ConexaoBD();
		try {
			conexao.conectarBD();
			RepositorioFotografo rf = new RepositorioFotografo(conexao.getConn());

			Vector<String> tel = new Vector<String>();
			tel.add("30321235");

			Vector<Fotografo> funcionarios = rf.buscarFotografo("");

			
			Fotografo f = new Fotografo("Joao","M" , "Esportes", "12/08/1990", "12/08/1999", "j", tel, new Endereco("5080040","Recife","Rua y","PE"), 3232);
			
			//rf.inserirFotografo(f);
			
			Vector<Fotografo> v = rf.buscarFotografo("jOaO");
			for (int i = 0; i < v.size(); i++)
				System.out.println(v.get(i).getNome());
			System.out.println(rf.buscarFotografo(3232).getNome());

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
